package com.cskaoyan.javase.array._2memory;

/**
 * 数组的静态初始化
 * 静态初始化一个数组，输出数组名及元素。
 * 然后给数组中的元素赋值，再次输出数组名及元素。
 *
 * 虽然静态初始化明确指出了堆上对象中元素的取值
 * 但是具有默认值的过程,称之为"默认初始化"是不可以被省略的
 *
 * 在整个Java面向对象中,对象中的元素(属性),永远最先进行默认初始化,永远最先具有默认值,任何其它的赋值,都是在默认值的基础上进行的.
 * 可以认为默认初始化,具有默认值是JVM在堆上创建对象结构时,直接默认给出的,它在任何其它赋值之前进行.
 * 这其实是一种安全机制,它保证了在任何时候访问对象,对象中的元素都有值.
 *
 *
 * 一个经典的初学者问题
 * 既然引用数据类型具有默认初始化，对象中的元素具有默认值，那为什么声明一个数组后为什么不能立刻使用呢？
 * 引用数据类型变量确实具有默认初始化,但是注意,指的是引用数据类型对象中的元素具有默认初始化
 * 引用数据类型的引用本身是一个局部变量,局部变量没有默认初始化,没有默认值
 * 所以直接声明一个数组是不可用的
 *
 * @since 11:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        String[] arr = {"abc", "123"};
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr.length);
        arr[0] = "666";
        System.out.println(arr[0]);
        System.out.println(arr);
        System.out.println(arr.length);
    }
}
